﻿using Acaweb.Data.Contracts;
using Acaweb.Model.Entities;
using Acaweb.Model.Entities.DatosCompuestos;
using Acaweb.Componentes.Contracts;
using System.Collections.Generic;
using System.Linq;

namespace Acaweb.Componentes
{
    public class InteresadosService : BaseService, IInteresadosService
    {
        private IInteresadosDao _InteresadosDao;
        private IValoresFormulariosDao _ValoresFormulariosDao;
        private IReporteDao _ReporteDao;

        public IReporteDao ReporteDao
        {
            get { return _ReporteDao; }
            set { _ReporteDao = value; }
        }

        public IValoresFormulariosDao ValoresFormulariosDao
        {
            get { return _ValoresFormulariosDao; }
            set { _ValoresFormulariosDao = value; }
        }

        public IInteresadosDao InteresadosDao
        {
            get { return _InteresadosDao; }
            set { _InteresadosDao = value; }
        }

        public Interesados GetById(int IdInteresado)
        {
            Interesados Interesado = InteresadosDao.GetById(IdInteresado);
            Interesado.ValoresFormularios = ValoresFormulariosDao.GetByInteresado(IdInteresado).ToList();

            return Interesado;
        }

        public IList<Interesados> GetAll()
        {
            return InteresadosDao.GetAll();
        }

        public IList<Interesados> GetByPlanesEstudios(int PlanEstudio)
        {
            return InteresadosDao.GetByPlanesEstudios(PlanEstudio);
        }

        public IList<Interesados> GetByIdentificacion(Identificacion Identificacion)
        {

            List<Interesados> Interesados = InteresadosDao.GetByIdentificacion(Identificacion).ToList();
            //Interesados.ForEach(t => t.ValoresFormularios = ValoresFormulariosDao.GetByInteresado(t.CodigoInteresado).ToList());

            return Interesados;
        }

        public string CreateInteresado(Interesados Interesado)
        {
            Interesado.FechaDescarga = System.DateTime.Now;
            InteresadosDao.Save(Interesado);
            int Id = InteresadosDao.GetByIdentificacion(Interesado.InteresadoPk.Identificacion).First().CodigoInteresado;
            
            

            return GenPDF(Interesado.InteresadoPk);
        }

        public IList<Interesados> GetByPeriodoAcademico(PeriodoAcademico PeriodoAcademico)
        {
            return InteresadosDao.GetByPeriodoAcademico(PeriodoAcademico);
        }

        public string GenerarPDF(InteresadoPk InteresadoPk)
        {
            return GenPDF(InteresadoPk);
        }

        private string GenPDF(InteresadoPk InteresadoPk)
        {
            return ReporteDao.GenerateVolanteInscripcion(InteresadoPk.PeriodoAcedemico, InteresadoPk.Identificacion.NumeroDocumentoIdentidad);
        }
    }
}
